"""
自动ResourcePlan生成工具主程序

简化的命令行界面，支持：
- 基本参数配置
- 完整的错误处理
- 中文用户提示
- 调试模式支持

使用方法：
python main.py --config config.yaml
python main.py --projects data/input/projects.xlsx --resources data/input/resources.xlsx --tasks data/input/tasks.xlsx
python main.py --help  # 查看详细帮助
"""

import argparse
import sys
from pathlib import Path

from app import ResourcePlanApp


def print_banner():
    """打印程序启动横幅"""
    print("\n" + "=" * 60)
    print("           自动资源规划工具 (Auto Resource Planner)")
    print("=" * 60)
    print("版本: 1.0.0")
    print("功能: 项目资源自动分配和冲突检测")
    print("=" * 60 + "\n")


def validate_arguments(args) -> bool:
    """
    验证命令行参数的有效性
    
    Args:
        args: 解析后的命令行参数
        
    Returns:
        bool: 参数是否有效
    """
    # 检查配置文件
    if not Path(args.config).exists():
        print(f"❌ 错误：配置文件不存在 '{args.config}'")
        print("   请检查文件路径或使用 --config 指定正确的配置文件")
        return False
    
    # 如果指定了数据文件，检查是否都存在
    data_files = [args.projects, args.resources, args.tasks]
    if any(data_files):  # 如果指定了任何一个数据文件
        if not all(data_files):  # 但不是全部都指定了
            print("❌ 错误：如果指定数据文件，必须同时指定 --projects, --resources, --tasks")
            return False
        
        # 检查文件是否存在
        for file_path, file_type in [(args.projects, "项目"), (args.resources, "资源"), (args.tasks, "任务")]:
            if not Path(file_path).exists():
                print(f"❌ 错误：{file_type}数据文件不存在 '{file_path}'")
                return False
    
    return True


def main():
    """主函数：处理命令行参数并执行资源规划流程"""
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(
        description="自动资源规划工具 - 为项目任务自动分配人力资源",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例：
  # 使用默认配置文件
  python main.py
  
  # 指定配置文件
  python main.py --config custom_config.yaml
  
  # 直接指定数据文件
  python main.py --projects data/projects.xlsx --resources data/resources.xlsx --tasks data/tasks.xlsx
  
  # 启用调试模式和详细输出
  python main.py --debug --verbose
  
  # 指定输出目录
  python main.py --output results/
        """
    )

    # 配置文件参数
    parser.add_argument(
        "--config", "-c", 
        type=str, 
        default="config.yaml",
        help="配置文件路径 (默认: config.yaml)"
    )

    # 数据文件参数组
    data_group = parser.add_argument_group("数据文件", "直接指定输入数据文件（可选，会覆盖配置文件中的设置）")
    data_group.add_argument(
        "--projects", 
        type=str,
        help="项目数据文件路径 (.xlsx)"
    )
    data_group.add_argument(
        "--resources", 
        type=str,
        help="资源数据文件路径 (.xlsx)"
    )
    data_group.add_argument(
        "--tasks", 
        type=str,
        help="任务数据文件路径 (.xlsx)"
    )

    # 输出参数
    output_group = parser.add_argument_group("输出选项")
    output_group.add_argument(
        "--output", "-o", 
        type=str,
        help="输出目录路径（可选，会覆盖配置文件中的设置）"
    )
    output_group.add_argument(
        "--verbose", "-v", 
        action="store_true",
        help="显示详细的规划结果和统计信息"
    )

    # 调试参数
    debug_group = parser.add_argument_group("调试选项")
    debug_group.add_argument(
        "--debug", 
        action="store_true",
        help="启用调试模式（显示详细错误信息）"
    )
    debug_group.add_argument(
        "--quiet", "-q", 
        action="store_true",
        help="静默模式（只显示错误信息）"
    )

    # 解析命令行参数
    args = parser.parse_args()

    # 显示程序横幅（除非是静默模式）
    if not args.quiet:
        print_banner()

    try:
        # 验证参数
        if not validate_arguments(args):
            print("\n使用 'python main.py --help' 查看使用说明")
            sys.exit(1)
        
        if not args.quiet:
            print("🚀 正在初始化应用程序...")
        
        # 创建应用程序实例
        app = ResourcePlanApp(config_path=args.config, debug=args.debug)
        
        if not args.quiet:
            print("✅ 应用程序初始化完成")
            print("📊 开始执行资源规划流程...\n")
        
        # 执行完整的工作流程
        success = app.run_complete_workflow(
            projects_file=args.projects,
            resources_file=args.resources,
            tasks_file=args.tasks,
            output_dir=args.output,
            verbose=args.verbose
        )
        
        # 显示执行结果摘要
        if not args.quiet:
            summary = app.get_summary()
            print("\n" + "=" * 50)
            print("📋 执行结果摘要")
            print("=" * 50)
            print(f"✅ 配置加载: {'成功' if summary['config_loaded'] else '失败'}")
            print(f"📁 数据加载: {'成功' if summary['data_loaded'] else '失败'}")
            print(f"🎯 规划执行: {'成功' if summary['planning_completed'] else '失败'}")
            
            if summary['data_loaded']:
                counts = summary['data_counts']
                print(f"\n📊 数据统计:")
                print(f"   项目: {counts['projects']} 个")
                print(f"   资源: {counts['resources']} 个")
                print(f"   任务: {counts['tasks']} 个")
            
            if summary.get('planning_results'):
                results = summary['planning_results']
                print(f"\n🎯 规划结果:")
                print(f"   状态: {'成功' if results['success'] else '有问题'}")
                print(f"   已分配任务: {results['allocated_tasks']} 个")
                print(f"   未分配任务: {results['unassigned_tasks']} 个")
                print(f"   资源冲突: {results['conflicts']} 个")
                print(f"   警告信息: {results['warnings']} 个")
            
            print("\n" + "=" * 50)
            if success:
                print("🎉 资源规划流程执行成功！")
            else:
                print("❌ 资源规划流程执行失败，请检查日志获取详细信息")
            print("=" * 50)
        
        # 根据执行结果设置退出码
        sys.exit(0 if success else 1)
        
    except KeyboardInterrupt:
        print("\n\n⚠️  用户中断了程序执行")
        sys.exit(130)
        
    except Exception as e:
        print(f"\n❌ 程序执行过程中发生错误：{e}")
        
        if args.debug:
            print("\n🔍 详细错误信息:")
            import traceback
            traceback.print_exc()
        else:
            print("💡 使用 --debug 参数可以查看详细错误信息")
            
        print("\n使用 'python main.py --help' 查看使用说明")
        sys.exit(1)


if __name__ == "__main__":
    main()